/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: TxnEnd.java,v 1.1 2006/05/06 08:59:03 ckaestne Exp $ */ package com.sleepycat.je.txn; import java.nio.ByteBuffer; import java.sql.Timestamp; import com.sleepycat.je.log.LogEntryType; import com.sleepycat.je.log.LogReadable; import com.sleepycat.je.log.LogUtils; import com.sleepycat.je.log.LoggableObject; import com.sleepycat.je.utilint.DbLsn; /** * This class writes out a transaction commit or transaction end record. */ public abstract class TxnEnd implements LoggableObject, LogReadable { protected long id; protected Timestamp time; private long lastLsn; TxnEnd(long id, long lastLsn) { this.id = id; time = new Timestamp(System.currentTimeMillis()); this.lastLsn = lastLsn; } /** * For constructing from the log */ public TxnEnd() { lastLsn = DbLsn.NULL_LSN; } /* * Accessors. */ public long getId() { return id; } long getLastLsn() { return lastLsn; } protected abstract String getTagName(); /* * Log support for writing. */ /** * @see LoggableObject#getLogType */ public abstract LogEntryType getLogType(); /** * @see LoggableObject#marshallOutsideWriteLatch * Can be marshalled outside the log write latch. */ public boolean marshallOutsideWriteLatch() { return true; } /** * @see LoggableObject#countAsObsoleteWhenLogged */ public boolean countAsObsoleteWhenLogged() { return false; } /** * @see LoggableObject#postLogWork */ public void postLogWork(long justLoggedLsn) { } /** * @see LoggableObject#getLogSize */ public int getLogSize() { return LogUtils.LONG_BYTES + LogUtils.getTimestampLogSize() + LogUtils.getLongLogSize(); // lastLsn } /** * @see LoggableObject#writeToLog */ public void writeToLog(ByteBuffer logBuffer) { LogUtils.writeLong(logBuffer, id); LogUtils.writeTimestamp(logBuffer, time); LogUtils.writeLong(logBuffer, lastLsn); } /** * @see LogReadable#readFromLog */ public void readFromLog(ByteBuffer logBuffer, byte entryTypeVersion) { id = LogUtils.readLong(logBuffer); time = LogUtils.readTimestamp(logBuffer); lastLsn = LogUtils.readLong(logBuffer); } /** * @see LogReadable#dumpLog */ public void dumpLog(StringBuffer sb, boolean verbose) { sb.append("<").append(getTagName()); sb.append(" id=\"").append(id); sb.append("\" time=\"").append(time); sb.append("\">"); sb.append(DbLsn.toString(lastLsn)); sb.append("</").append(getTagName()).append(">"); } /** * @see LogReadable#logEntryIsTransactional */ public boolean logEntryIsTransactional() { return true; } /** * @see LogReadable#getTransactionId */ public long getTransactionId() { return id; } }